什么是文件上传漏洞
文件上传漏洞是指Web服务器允许用户将文件上传至其文件系统,但这些文件可能并没有经过充分的验证,如文件名称、类型、内容或大小等。未能正确执行这些限制就意味着即使最基本的图像上传功能也可能用于上传任意具有潜在危险的文件,里面甚至包括远程代码执行的服务器端脚本文件。
在某些情况下,上传文件的行为本身就足以造成损害,其他攻击对该文件后续HTTP的请求,通常是为了触发服务器执行该文件。
文件上传漏洞出现原因:
造成文件上传漏洞的原因主要是在于开发者对代码开发没有考虑文件格式后缀的合法性校验或者是否只在前端通过JS脚本进行后缀检验,在向日葵看来,关键原因还是在于代码的严谨性不够健全才会导致此类漏洞出现。
文件上传漏洞危害:
上传漏洞与SQL注入或 XSS相比,其风险更大,如果 Web应用程序存在上传漏洞,攻击者上传的文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行。如果上传的文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为。
如果上传的文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行。如果上传的文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。甚至攻击者可以直接上传一个webshell到服务器上 完全控制系统或致使系统瘫痪。
保护网站免受文件上传漏洞影响的最有效方法是:
根据允许扩展名的白名单而不是禁止扩展名的黑名单来检查文件扩展名,猜测希望允许哪些扩展比猜测攻击者可能尝试上传哪些扩展要容易的多。
确保文件名不包含任何可能被解释为目录或遍历序列(../)的子字符串。
重命名上传的文件以避免可能导致现有文件被覆盖的冲突。
在完全验证之前不要将文件上传到服务器的文件系统中。
尽可能使用已建立的框架来预处理文件上传,而不是尝试编写自己的验证机制。